package avrobase.caching; import avrobase.AvroFormat; import avrobase.Row; import avrobase.data.Beacon; import avrobase.file.FAB; import com.google.common.base.Supplier; import com.google.common.primitives.Longs; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import org.junit.Test; import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; /** * Caching test. * <p/> * User: sam * Date: 5/10/11 * Time: 2:12 PM */ public class CacherTest { Random r = new SecureRandom(); @Test public void cachingtest() { FAB<Beacon, byte[]> beaconFAB = new FAB<Beacon, byte[]>("/tmp/cachingtest/beacons", "/tmp/cachingtest/schemas", new Supplier<byte[]>() { @Override public byte[] get() { return Longs.toByteArray(r.nextLong() % 100000); } }, Beacon.SCHEMA$, AvroFormat.BINARY, null); Cacher.KeyMaker<byte[]> keyMaker = new Cacher.KeyMaker<byte[]>() { public Object make(final byte[] key) { return new BytesKey(key); } }; assertTrue(keyMaker.make(new byte[4]).equals(keyMaker.make(new byte[4]))); CacheManager cm = CacheManager.create(); Cache cache = new Cache("test", 10000, false, true, -1, -1); Cacher<Beacon, byte[]> beaconCacher = new Cacher<Beacon, byte[]>(beaconFAB, keyMaker, cache); cm.addCache(cache); int total = 0; for (Row<Beacon, byte[]> beaconRow: beaconCacher.scan(null, null)){ beaconCacher.delete(beaconRow.row); } for (Row<Beacon, byte[]> beaconRow: beaconCacher.scan(null, null)){ total++; } assertEquals(0, total); List<byte[]> rows = new ArrayList<byte[]>(); for (int i = 0; i < 1000; i++) { Beacon beacon = new Beacon(); beacon.browser = "asdfasdfasdfasd" + i; beacon.login = "adfasdfasdfasdfsfas" + i; beacon.useragent = "adfasdfasdfasdfadsfadsf" + i; beacon.parameters = new HashMap<CharSequence, CharSequence>(); rows.add(beaconCacher.create(beacon)); } for (Row<Beacon, byte[]> beaconRow: beaconCacher.scan(null, null)){ total++; } { long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { beaconFAB.get(rows.get(r.nextInt(rows.size()))); } long end = System.currentTimeMillis(); System.out.println(end - start); } { long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { beaconCacher.get(rows.get(r.nextInt(rows.size()))); } long end = System.currentTimeMillis(); System.out.println(end - start); } { long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { beaconCacher.get(Longs.toByteArray(r.nextLong() % 100000)); } long end = System.currentTimeMillis(); System.out.println(end - start); } System.out.println(beaconCacher); } }